
class onDemandBuilder
{
    //dus we zeggen zat hem moet maken
    // en als we vragen dan doen we het
    
    virtual MapObject * build();
}

class robotBuilder : onDemandBuilder
{
    robotBuilder(char * "string naam"){};
    
    MapObject * build();
    
    private:
    char * data;
}

class RoboRallyFactory
{
    // dunno als we constraint gaan gebruiken
    //add constraint to make sure idiot returns a robot...
    virtual Robot * addRobot(char * t, Position position) = 0;
};

class QtRoboRallyFactory : public RoboRallyFactory
{
    Robot * addRobot(char * t, Position position)
    {
        return new QtRobot(t, position);
    };
};

class MapBuilder
{
    MapBuilder(int X, int Y) : X(X), Y(Y) {};
    
    GameObject * createElementAt(int i) = 0;
    
    unsigned int getX() { return X; };
    unsigned int getY() { return Y; };
    
protected:
    unsigned int X;
    unsigned int Y; //size
};

class RoboRallyMapBuilder : public MapBuilder
{
    RoboRallyMapBuilder(RoboRallyFactory * factory) : factory(factory) {};
    
    void addRobot(int x, int y);
//    void addTower(int x, int y);
    
private:
    RoboRallyFactory * factory;
};

//mss ook mapReader , lezen van files

class World
{
    World(MapBuilder * builder)
    {
        //getSize and allocate a grid
        Resize(builder->getX(), builder->getY());
        
        //fill the grid with newly created object, so outside fuckers don't fuck about
        for(int i = 0 ; ...)
            AddObject builder.createElementAt(i), X, Y);
    }   
}

int main(int ,char **)
{
    World()


}
